import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import java.util.Vector;
public class MyPanel extends JPanel implements KeyListener, Runnable {
    private int width,height;
    /**要显示的菜单项*/
    private String[] menus = new String[]{"开始游戏", "游戏设置", "帮助关于", "退出游戏"};
    private String[] type = new String[]{"红色","黄色","绿色"};
    private int id=0;
    /**当前焦点在哪个菜单项*/
    private int focusIndex;
    /**菜单项位置的横坐标*/
    private int menu_ys = 600;
    private int color_type=0;

    /**菜单项位置的纵坐标*/
    private int[] menu_x = new int[]{250, 350,450, 550};
    private int[] type_x = new int[]{250,350,450,500};
    public int start=-1;
    //我方坦克
    Hero hero = null;
    //敌方坦克
    Vector<EnemyTank> enemyTanks = new Vector<>();
    //爆炸音效
    //发射音效
    int enemyTankSize = 3;
    Vector<Bomb> bombs=new Vector<>();
    //三种爆炸图片
    Image image1=null;
    Image image2=null;
    Image image3=null;
    //胜利和失败的图片
    Image image4=null;
    Image image5=null;

    //开始菜单图片
    Image image6=null;
    //计数击败坦克
    private int frequency=0;
    //火焰特效
    Vector<Fire> fires =new Vector<>();
    public MyPanel(int width,int height) {
        this.width=width;
        this.height=height;
        hero = new Hero(500, 500);
        //设置坦克速度
        hero.setSpeed(5);

        for (int i = 0; i < enemyTankSize; i++) {
            Random random =new Random();
            EnemyTank enemyTank = new EnemyTank(random.nextInt(500), random.nextInt(500));
            enemyTank.setDirection(2);
            //启动敌人坦克线程
            new Thread(enemyTank).start();
            //给该enemyTank 加入一颗子弹
            Shot shot = new Shot(enemyTank.getX() + 20, enemyTank.getY() + 60, enemyTank.getDirection());
            enemyTank.getShots().add(shot);
            //为每个坦克，放入所有的敌人对象
            enemyTank.setEnemyTanks(enemyTanks);
            //启动shot
            new Thread(shot).start();
            enemyTanks.add(enemyTank);
        }
        //获取路径
        String project =System.getProperty("user.dir");
        project+="\\";
        String path=System.getProperty("user.dir");
        System.out.println(project+'\n');
        image1=Toolkit.getDefaultToolkit().getImage(project+"bomb_1.gif");
        image2=Toolkit.getDefaultToolkit().getImage(project+"bomb_2.gif");
        image3=Toolkit.getDefaultToolkit().getImage(project+"bomb_3.gif");
        image4=Toolkit.getDefaultToolkit().getImage(project+"victory.gif");
        image5=Toolkit.getDefaultToolkit().getImage(project+"fail.gif");
        image6=Toolkit.getDefaultToolkit().getImage(project+"start.gif");
    }

    @Override
    public void paint(Graphics g) {
        if(start==-1){
            g.drawImage(image6,0,0,1300,750,this);
            //g.fillRect(0, 0, width, height);
            //绘制菜单项。焦点所在的菜单用红色，其它为黑色。
            for (int i = 0; i < menus.length; i++) {
                int x = menu_x[i];
                int y = menu_ys;

                //如果是焦点按钮，用红色突出
                if(i == focusIndex){
                    g.setColor(Color.red);
                }else{
                    g.setColor(Color.black);
                }
                g.drawString(menus[i], x, y);
            }
        }
        else if(start==1){
            g.setColor(Color.LIGHT_GRAY);
            g.fillRect(0,0,1300,750);
            g.setColor(Color.BLACK);
            Font font = new Font("楷体", Font.BOLD, 10);
            g.setFont(font);
            g.drawString("选择坦克颜色,按e确认",100,100);
            g.drawString("按q返回开始界面",100,150);

            for (int i = 0; i < type.length; i++) {
                int x = type_x[i];
                int y = 200;
                //如果是焦点按钮，用红色突出
                if(i == id){
                    g.setColor(Color.red);
                }else{
                    g.setColor(Color.black);
                }
                g.drawString(type[i], x, y);
            }
            g.setColor(Color.BLACK);
            g.fill3DRect(240, 100, 10, 60, false);
            g.fill3DRect(240 + 30, 100, 10, 60, false);
            g.setColor(Color.RED);
            g.fill3DRect(240 + 10, 100 + 10, 20, 40, false);
            //画圆
            g.fillOval(240 + 10, 100 + 20, 20, 20);
            //画炮杆--起点终点
            g.setColor(Color.BLACK);
            g.drawLine(240 + 20, 100 + 30, 240 + 20,100);

            g.setColor(Color.BLACK);
            g.fill3DRect(340, 100, 10, 60, false);
            g.fill3DRect(340 + 30, 100, 10, 60, false);
            g.setColor(Color.YELLOW);
            g.fill3DRect(340 + 10, 100 + 10, 20, 40, false);
            //画圆
            g.fillOval(340 + 10, 100 + 20, 20, 20);
            //画炮杆--起点终点
            g.setColor(Color.BLACK);
            g.drawLine(340 + 20, 100 + 30, 340 + 20,100);

            g.setColor(Color.BLACK);
            g.fill3DRect(440, 100, 10, 60, false);
            g.fill3DRect(440 + 30, 100, 10, 60, false);
            g.setColor(Color.GREEN);
            g.fill3DRect(440 + 10, 100 + 10, 20, 40, false);
            //画圆
            g.fillOval(440 + 10, 100 + 20, 20, 20);
            //画炮杆--起点终点
            g.setColor(Color.BLACK);
            g.drawLine(440 + 20, 100 + 30, 440 + 20,100);
        }
        else{
            if(enemyTanks.size()<=2){
                Random random =new Random();
                //System.out.println(tx+"    "+ty);
                EnemyTank enemyTank = new EnemyTank(random.nextInt(500),random.nextInt(500));
                enemyTank.setDirection(2);
                //启动敌人坦克线程
                new Thread(enemyTank).start();
                //给该enemyTank 加入一颗子弹
                Shot shot = new Shot(enemyTank.getX() + 20, enemyTank.getY() + 60, enemyTank.getDirection());
                enemyTank.getShots().add(shot);
                //为每个坦克，放入所有的敌人对象
                enemyTank.setEnemyTanks(enemyTanks);
                //启动shot
                new Thread(shot).start();
                enemyTanks.add(enemyTank);
            }
            //胜利
            if(frequency>=10){
                g.drawImage(image4, 0, 0, 1300,750,this);
                return ;
            }
            //失败
            if(!hero.isLive()){
                g.drawImage(image5, 0, 0, 1300,750,this);
                return ;
            }
            super.paint(g);
            //黑色背景
            g.fillRect(0, 0, 1000, 750);
            //游戏信息
            showInfo(g);
            //画火焰痕迹
            for(int i=0;i<fires.size();i++){
                Fire fire=fires.get(i);
                if(fire.getTime()==0){
                    fires.remove(fire);
                }
                else{
                    fire.pop();
                    g.setColor(Color.RED);
                    int dir= fire.getDir();
                    if(dir==0){//上
                        g.fill3DRect(fire.getX(), fire.getY()+60, 10, 2, false);
                        g.fill3DRect(fire.getX() + 30, fire.getY()+60, 10, 2, false);

                        g.fill3DRect(fire.getX(), fire.getY()+62, 3, 2, false);
                        g.fill3DRect(fire.getX()+7, fire.getY()+62, 3, 2, false);
                        g.fill3DRect(fire.getX() + 30, fire.getY()+62, 3, 2, false);
                        g.fill3DRect(fire.getX() + 37, fire.getY()+62, 3, 2, false);
                    }
                    else if(dir==1){//右
                        g.fill3DRect(fire.getX(), fire.getY(), 2, 10, false);
                        g.fill3DRect(fire.getX(), fire.getY()+ 30, 2, 10, false);

                        g.fill3DRect(fire.getX()-2, fire.getY(), 2, 3, false);
                        g.fill3DRect(fire.getX()-2, fire.getY()+7, 2, 3, false);
                        g.fill3DRect(fire.getX()-2, fire.getY()+ 30, 2, 3, false);
                        g.fill3DRect(fire.getX()-2, fire.getY()+ 37, 2, 3, false);
                    }
                    else if(dir==2){//下
                        g.fill3DRect(fire.getX(), fire.getY(), 10, 2, false);
                        g.fill3DRect(fire.getX() + 30, fire.getY(), 10, 2, false);

                        g.fill3DRect(fire.getX(), fire.getY()-2, 3, 2, false);
                        g.fill3DRect(fire.getX()+7, fire.getY()-2, 3, 2, false);
                        g.fill3DRect(fire.getX() + 30, fire.getY()-2, 3, 2, false);
                        g.fill3DRect(fire.getX() + 37, fire.getY()-2, 2, 2, false);
                    }
                    else{//左
                        g.fill3DRect(fire.getX()+60, fire.getY(), 2, 10, false);
                        g.fill3DRect(fire.getX()+60, fire.getY()+ 30, 2, 10, false);

                        g.fill3DRect(fire.getX()+62, fire.getY(), 2, 3, false);
                        g.fill3DRect(fire.getX()+62, fire.getY()+7, 2, 3, false);
                        g.fill3DRect(fire.getX()+62, fire.getY()+ 30, 2, 3, false);
                        g.fill3DRect(fire.getX()+62, fire.getY()+ 37, 2, 3, false);
                    }
                }
            }
            //画己方坦克
            if (hero != null && hero.isLive()) {
                drawTank(hero.getX(), hero.getY(), g, hero.getDirection(), 1);
            }
            //画出自己射击的子弹
            //不为空，且处于发射状态
            if (hero.getShot() != null && hero.getShot().isLive()) {
                 g.setColor(Color.RED);
                g.draw3DRect(hero.getShot().getX(), hero.getShot().getY(), 2, 2, false);
            }
            if (hero.getShots().size() > 0) {
                for (int i = 0; i < hero.getShots().size(); i++) {
                    Shot shot = hero.getShots().get(i);
                    if (shot != null && shot.isLive()) {
                        g.draw3DRect(shot.getX(), shot.getY(), 2, 2, false);
                    } else {
                        //如果shot对象已经无效，就从子弹集合中移除
                        hero.getShots().remove(shot);
                    }
                }
            }
            //画敌人坦克
            for (int i = 0; i < enemyTanks.size(); i++) {
                EnemyTank enemyTank = enemyTanks.get(i);
                //判断当前坦克是否还存活，只有存活的时候才去画
                if (enemyTank.isLive()) {
                    drawTank(enemyTank.getX(), enemyTank.getY(), g, enemyTank.getDirection(), 0);
                    //绘制敌人坦克子弹
                    Vector<Shot> shots = enemyTank.getShots();
                    g.setColor(Color.cyan);
                    for (int j = 0; j < shots.size(); j++) {
                        Shot shot = shots.get(j);
                        //子弹存活的时候才绘制
                        if (shot.isLive()) {
                            g.draw3DRect(shot.getX(), shot.getY(), 1, 1, false);
                        } else {
                            //子弹出边界了，移除子弹
                            enemyTank.getShots().remove(shot);
                        }
                    }
                }
            }
            //画炸弹
            for(int i=0;i<bombs.size();i++){
                Bomb bomb=bombs.get(i);
                if(bomb.getLife()>6){
                    g.drawImage(image1, bomb.getX(), bomb.getY(), 60,60,this);
                }
                else if(bomb.getLife()>3){
                    g.drawImage(image2, bomb.getX(), bomb.getY(), 60,60,this);
                }
                else {
                    g.drawImage(image3, bomb.getX(), bomb.getY(), 60,60,this);
                }
                //炸弹生命值减少
                bomb.lifeDown();
                //炸弹生命值为零从集合里删除
                if(bomb.getLife()==0) bombs.remove(bomb);
            }
        }
    }
    //击毁敌方的坦克信息
    public void showInfo(Graphics g) {
        g.setColor(Color.BLACK);
        Font font = new Font("楷体", Font.BOLD, 25);
        g.setFont(font);
        g.drawString("累计击毁敌方坦克", 1020, 30);
        g.drawString("目标：击败敌方坦克",1020 ,50);
        g.drawString("击败10辆胜利",1020 ,70);
        Font font1 = new Font("楷体", Font.BOLD, 25);
        g.setFont(font1);
        g.drawString("规则：wsad移动",1020 ,500);
        g.drawString("j发射子弹",1020 ,550);

        drawTank(1020, 80, g, 0, 0);
        g.setColor(Color.BLACK);
        g.setFont(font);
        g.drawString("X  "+frequency+"",1080,100);
        g.setColor(Color.BLACK);
    }
    //随机颜色
    //绘制坦克
    public void drawTank(int x, int y, Graphics g, int direction, int type) {
        g.setColor(Color.BLACK);
        //根据坦克的方向来绘制坦克
        //direction 0-上，1-右，2-下，3-左
        switch (direction) {
            case 0:
                //左右两边轮子
                g.fill3DRect(x, y, 10, 60, false);
                g.fill3DRect(x + 30, y, 10, 60, false);
                //画矩形
                //根据不同类型的坦克设置不同颜色
                switch (type) {
                    case 0://0 敌人的坦克
                        g.setColor(Color.cyan);
                        break;
                    //
                    case 1://1 我们的坦克
                        g.setColor(Color.RED);
                        g.fill3DRect(x, y, 1, 60, false);
                        g.fill3DRect(x + 40, y, 1, 60, false);
                        break;
                }
                if(type==1){
                    if(color_type==0){
                        g.setColor(Color.RED);
                    }
                    else if(color_type==1){
                        g.setColor(Color.YELLOW);
                    }
                    else{
                        g.setColor(Color.GREEN);
                    }
                }

                g.fill3DRect(x + 10, y + 10, 20, 40, false);
                //画圆

                g.fillOval(x + 10, y + 20, 20, 20);
                //画炮杆--起点终点
                g.setColor(Color.BLACK);
                g.drawLine(x + 20, y + 30, x + 20, y);
                break;
            case 1:
                g.fill3DRect(x, y, 60, 10, false);//上边轮子
                g.fill3DRect(x, y + 30, 60, 10, false);//下边轮子
                //画矩形
                //根据不同类型的坦克设置不同颜色
                switch (type) {
                    case 0://0 敌人的坦克
                        g.setColor(Color.cyan);
                        break;
                    //
                    case 1://1 我们的坦克
                        g.setColor(Color.RED);
                        g.fill3DRect(x, y, 60, 1, false);//上边轮子
                        g.fill3DRect(x, y + 40, 60, 1, false);//下边轮子
                        break;
                }
                if(type==1){
                    if(color_type==0){
                        g.setColor(Color.RED);
                    }
                    else if(color_type==1){
                        g.setColor(Color.YELLOW);
                    }
                    else{
                        g.setColor(Color.GREEN);
                    }
                }
                g.fill3DRect(x + 10, y + 10, 40, 20, false);
                //画圆
                g.fillOval(x + 20, y + 10, 20, 20);
                //画炮杆--起点终点
                g.setColor(Color.BLACK);
                g.drawLine(x + 30, y + 20, x + 60, y + 20);
                break;
            case 2:
                //两边轮子
                g.fill3DRect(x, y, 10, 60, false);
                g.fill3DRect(x + 30, y, 10, 60, false);
                //画矩形
                //根据不同类型的坦克设置不同颜色
                switch (type) {
                    case 0://0 敌人的坦克
                        g.setColor(Color.cyan);
                        break;
                    //
                    case 1://1 我们的坦克
                        g.setColor(Color.RED);
                        g.fill3DRect(x, y, 1, 60, false);
                        g.fill3DRect(x + 40, y, 1, 60, false);
                        break;
                }
                if(type==1){
                    if(color_type==0){
                        g.setColor(Color.RED);
                    }
                    else if(color_type==1){
                        g.setColor(Color.YELLOW);
                    }
                    else{
                        g.setColor(Color.GREEN);
                    }
                }
                g.fill3DRect(x + 10, y + 10, 20, 40, false);
                //画圆
                g.fillOval(x + 10, y + 20, 20, 20);
                //画炮杆--起点终点
                g.setColor(Color.BLACK);
                g.drawLine(x + 20, y + 30, x + 20, y + 60);
                break;
            case 3:
                g.fill3DRect(x, y, 60, 10, false);//上边轮子
                g.fill3DRect(x, y + 30, 60, 10, false);//下边轮子
                //画矩形
                //根据不同类型的坦克设置不同颜色
                switch (type) {
                    case 0://0 敌人的坦克
                        g.setColor(Color.cyan);
                        break;
                    //
                    case 1://1 我们的坦克
                        g.setColor(Color.RED);
                        g.fill3DRect(x, y, 60, 1, false);//上边轮子
                        g.fill3DRect(x, y + 40, 60, 1, false);//下边轮子
                        break;
                }
                if(type==1){
                    if(color_type==0){
                        g.setColor(Color.RED);
                    }
                    else if(color_type==1){
                        g.setColor(Color.YELLOW);
                    }
                    else{
                        g.setColor(Color.GREEN);
                    }
                }
                g.fill3DRect(x + 10, y + 10, 40, 20, false);
                //画圆
                g.fillOval(x + 20, y + 10, 20, 20);
                //画炮杆--起点终点
                g.setColor(Color.BLACK);
                g.drawLine(x + 30, y + 20, x, y + 20);
                break;
            default:
                System.out.println("暂时没有处理");
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        int code = e.getKeyCode();
        //判断用户按下的按键
        if (KeyEvent.VK_W == code) { //向上
            //移动时判断不能重叠
            hero.setDirection(0);
            hero.moveUp();
            Fire fire =new Fire(hero.getX(), hero.getY(),hero.getX()+40, hero.getY());
            fire.setDir(0);
            fires.add(fire);
        } else if (KeyEvent.VK_D == code) { //向右
            hero.setDirection(1);
            hero.moveRight();
            Fire fire =new Fire(hero.getX(), hero.getY(),hero.getX(),hero.getY()+40);
            fire.setDir(1);
            fires.add(fire);
        } else if (KeyEvent.VK_S == code) { //向下
            hero.setDirection(2);
            hero.moveDown();
            Fire fire =new Fire(hero.getX(), hero.getY(),hero.getX()+40,hero.getY());
            fire.setDir(2);
            fires.add(fire);
        } else if (KeyEvent.VK_A == code) { //向左
            hero.setDirection(3);
            hero.moveLeft();
            Fire fire =new Fire(hero.getX(), hero.getY(),hero.getX(),hero.getY()+40);
            fire.setDir(3);
            fires.add(fire);
        }
        else if(KeyEvent.VK_UP==code) {//往上的方向键
            focusIndex = (focusIndex + menus.length - 1) % menus.length;   //考虑%取余的意义。
            id=(id+type.length-1)%type.length;
        }
        else if(KeyEvent.VK_DOWN==code) {//往下的方向键
            focusIndex = (focusIndex + 1) % menus.length;
            id=(id+type.length+1)%type.length;
        }
        else if(KeyEvent.VK_E==code){
            color_type=id;
        }
        else if(KeyEvent.VK_ENTER==code) {//如果是Enter键
            System.out.println(focusIndex);
            if(start==-1){
                if(focusIndex==0) start=0;
                if(focusIndex==3){
                    System.exit(0);
                }
                if(focusIndex==1&&start==-1){
                    start=1;
                }
            }
            if((enemyTanks.size()==0||!hero.isLive())&&start==0) System.exit(0);
        }
        else if(KeyEvent.VK_Q==code){
            if(start!=0) start=-1;
        }
        //判断是否是射击
        if (KeyEvent.VK_J == code) {
            hero.shotEnemyTank();
        }
        //重绘
        this.repaint();
    }
    //判断我方的子弹是否击中敌人坦克
    //判断子弹和坦克
    public void hitTank(Vector<Shot> shots, Tank tank) {
        for (int i = 0; i < shots.size(); i++) {
            hitTank(shots.get(i), tank);
        }
    }
    //判断子弹和坦克
    public void hitTank(Shot s, Tank tank) {
        switch (tank.getDirection()) {
            case 0://坦克向上
            case 2://坦克向下
                if (s.getX() > tank.getX() && s.getX() < tank.getX() + 40 && s.getY() > tank.getY() && s.getY() < tank.getY() + 60) {
                    s.setLive(false);
                    tank.setLive(false);
                    //击中敌人坦克后，集合中去掉
                    enemyTanks.remove(tank);
                    Bomb bomb =new Bomb(tank.getX(),tank.getY());
                    bombs.add(bomb);
                    frequency++;
                }
                break;
            case 1://坦克向右
            case 3://坦克向左
                if (s.getX() > tank.getX() && s.getX() < tank.getX() + 60 &&
                        s.getY() > tank.getY() && s.getY() < tank.getY() + 40) {
                    s.setLive(false);
                    tank.setLive(false);
                    //击中敌人坦克后，集合中去掉
                    enemyTanks.remove(tank);
                    Bomb bomb1 =new Bomb(tank.getX(),tank.getY());
                    bombs.add(bomb1);
                    frequency++;
                }
                break;
        }
    }
    //判断火焰痕迹和敌方坦克
    public void fireHit(Vector<Fire>fires,EnemyTank enemyTank){
        for(int i=0;i< fires.size();i++){
            fireHit(fires.get(i),enemyTank);
        }
    }
    public void fireHit(Fire f,EnemyTank enemyTank){
        switch (enemyTank.getDirection()) {
            case 0://坦克向上
            case 2://坦克向下
                if (f.getX() > enemyTank.getX() && f.getX() < enemyTank.getX() + 40 && f.getY() > enemyTank.getY() && f.getY() < enemyTank.getY() + 60) {
                    enemyTank.setLive(false);
                    //敌人坦克遇到火焰后，集合中去掉
                    enemyTanks.remove(enemyTank);
                    Bomb bomb =new Bomb(enemyTank.getX(),enemyTank.getY());
                    bombs.add(bomb);
                    frequency++;
                }
                break;
            case 1://坦克向右
            case 3://坦克向左
                if (f.getX() > enemyTank.getX() && f.getX() < enemyTank.getX() + 60 &&
                        f.getY() > enemyTank.getY() && f.getY() < enemyTank.getY() + 40) {
                    enemyTank.setLive(false);
                    //敌人坦克遇到火焰后，集合中去掉
                    enemyTanks.remove(enemyTank);
                    Bomb bomb1 =new Bomb(enemyTank.getX(),enemyTank.getY());
                    bombs.add(bomb1);
                    frequency++;
                }
                break;
        }
        switch (enemyTank.getDirection()) {
            case 0://坦克向上
            case 2://坦克向下
                if (f.getTx() > enemyTank.getX() && f.getTx() < enemyTank.getX() + 40 && f.getTy() > enemyTank.getY() && f.getTy() < enemyTank.getY() + 60) {
                    enemyTank.setLive(false);
                    //敌人坦克遇到火焰后，集合中去掉
                    enemyTanks.remove(enemyTank);
                    Bomb bomb =new Bomb(enemyTank.getX(),enemyTank.getY());
                    bombs.add(bomb);
                    frequency++;
                }
                break;
            case 1://坦克向右
            case 3://坦克向左
                if (f.getTx() > enemyTank.getX() && f.getTx() < enemyTank.getX() + 60 &&
                        f.getTy() > enemyTank.getY() && f.getTy() < enemyTank.getY() + 40) {
                    enemyTank.setLive(false);
                    //敌人坦克遇到火焰后，集合中去掉
                    enemyTanks.remove(enemyTank);
                    Bomb bomb1 =new Bomb(enemyTank.getX(),enemyTank.getY());
                    bombs.add(bomb1);
                    frequency++;
                }
                break;
        }
    }
    @Override
    public void keyReleased(KeyEvent e) {

    }
    @Override
    public void run() {
        //每隔100毫秒，重绘区域
        while (true) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //判断是否击中敌人坦克
            hitEnemy();
            //判断敌人坦克是否击中我们
            hitHero();
            this.repaint();
        }
    }
    // 判断是否击中敌人坦克
    public void hitEnemy() {
        if (hero.getShot() != null && hero.getShot().isLive()) {
            //遍历敌人所有的坦克
            for (int i = 0; i < enemyTanks.size(); i++) {
                EnemyTank enemyTank = enemyTanks.get(i);
                hitTank(hero.getShots(), enemyTank);
            }
        }
        if(fires.size()!=0){
            for (int i = 0; i < enemyTanks.size(); i++) {
                EnemyTank enemyTank = enemyTanks.get(i);
                fireHit(fires,enemyTank);
            }
        }
    }
    //判断敌人坦克是否击中我方坦克
    public void hitHero() {
        if (enemyTanks.size() > 0) {
            //遍历所有敌人的坦克的子弹，判断是否重合如果重合则显示爆炸
            for (int i = 0; i < enemyTanks.size(); i++) {
                EnemyTank enemyTank = enemyTanks.get(i);
                //判断是否击中
                //敌人的子弹
                Vector<Shot> shots = enemyTank.getShots();
                if (shots.size() > 0) {
                    for (int j = 0; j < shots.size(); j++) {
                        Shot shot = shots.get(j);
                        if (hero.isLive() && shot.isLive()) {
                            //判断子弹和坦克是否重合
                            hitTank(shots, hero);
                        }
                    }
                }
            }
        }
    }
}

